package com.jyw.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jyw.system.domain.SysUserTeam;
import com.jyw.system.domain.dto.UserTeamAddDto;
import com.jyw.system.domain.dto.UserTeamPageDto;
import com.jyw.system.domain.vo.UserTeamPageVo;

import java.util.List;

/**
 * 用户与小组关系Service接口
 *
 * @author system
 * @date 2023-08-07
 */
public interface ISysUserTeamService extends IService<SysUserTeam> {
    /**
     * 查询用户与小组关系
     *
     * @param id 用户与小组关系主键
     * @return 用户与小组关系
     */
    public SysUserTeam selectSysUserTeamById(Long id);

    /**
     * 查询用户与小组关系列表
     *
     * @param sysUserTeam 用户与小组关系
     * @return 用户与小组关系集合
     */
    public List<SysUserTeam> selectSysUserTeamList(SysUserTeam sysUserTeam);

    /**
     * 新增用户与小组关系
     *
     * @param sysUserTeam 用户与小组关系
     * @return 结果
     */
    public int insertSysUserTeam(SysUserTeam sysUserTeam);

    /**
     * 修改用户与小组关系
     *
     * @param sysUserTeam 用户与小组关系
     * @return 结果
     */
    public int updateSysUserTeam(SysUserTeam sysUserTeam);

    /**
     * 批量删除用户与小组关系
     *
     * @param ids 需要删除的用户与小组关系主键集合
     * @return 结果
     */
    public int deleteSysUserTeamByIds(Long[] ids);

    /**
     * 删除用户与小组关系信息
     *
     * @param id 用户与小组关系主键
     * @return 结果
     */
    public int deleteSysUserTeamById(Long id);

    /**
     * 新增用户小组
     *
     * @param userTeamAddDto
     */
    int addSysUsetTeam(UserTeamAddDto userTeamAddDto);

    /**
     * 用户小组分页查询
     *
     * @param userTeamPageVo
     * @return
     */
    List<UserTeamPageVo> selectSysUserTeamPage(UserTeamPageDto userTeamPageVo);

    /**
     * 查询小组未选用户
     *
     * @param userTeamPageVo
     * @return
     */
    List<UserTeamPageVo> getUserNotSelectList(UserTeamPageDto userTeamPageVo);

    /**
     * 查询用户所有的小组id
     */
    List<Long> getTeamIdByUser(Long userId);

    /**
     * 查询用户是哪些小组的组长
     */
    List<Long> teamLeaderByUserId(Long userId);

    /**
     * 查询小组组长
     * @param teamId
     * @return
     */
    Long getTeamLeader(Long teamId);

    /**
     * 查询处理人小组组长ID
     *
     * @param makeUser
     * @return
     */
    List<Long> getTeamLeaderByMark(Long makeUser);
}
